/** 
 * 地图相关js基本封装方法 
 **/

/** 地图相关图片地址变量 **/
var MAP_ICON = {
	icon : '/Public/Images/map_marker.png'
};


var marker_icon = new BMap.Icon( MAP_ICON.icon,new BMap.Size(16, 21),
		{anchor: new BMap.Size(8, 21),imageOffset: new BMap.Size(-24,-36)}
  ); //hover时的图标
/** 店铺icon **/
var marker_icon_hover = new BMap.Icon( MAP_ICON.icon,new BMap.Size(16, 21),
		{anchor: new BMap.Size(8, 21),imageOffset: new BMap.Size(-24, 0)}
  ); //默认图标

var map = null;//全局用到的地图对象。
var EARTH_RADIUS 	= 6378.137;//地球半径

//{ 'lng':"39.915055" , 'lat':"116.402814" };//默认地图中心
var MAP_DEFAULT_GEO 	= new BMap.Point("39.915055","116.402814");
var MAP_DEFAULT_ZOOM 	= 11;

var store_markers = new Array(); //当前查询所的所有店铺marker对象集合，格式array[0]={ id:_ary_store[i].dist_id , marker: BMap.Marker ,storeinfo:_ary_store[i]}


/**
 * 
 * @param d
 * @returns {Number}
 */
function rad(d){
    return d * Math.PI / 180.0;
}

/**
 * 计算两点间距离
 * @param lat1
 * @param lng1
 * @param lat2
 * @param lng2
 * @returns {Number} 返回距离 单位"米"
 */
function geoDistance( lat1, lng1, lat2, lng2)
{
      var radLat1 = rad(lat1);
      var radLat2 = rad(lat2);
      var a = radLat1 - radLat2;
      var b = rad(lng1) - rad(lng2)
      var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) +
      Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
      s = s * EARTH_RADIUS;
      s = Math.round(s * 10000) / 10000;
     
   return parseInt(s*1000);
}

/**
 * 初始化页面上的地图
 * @param container_id	包含地图容器ID
 * @param center_lat
 * @param center_lng
 * @param zoom_level	初始化的地图级别
 */
function initMap(container_id,center_lat,center_lng,zoom_level){
	map = new BMap.Map(container_id);        // 创建Map实例
	var point_ = new BMap.Point(center_lng,center_lat);    	// 创建点坐标  中国中心点 105.954335,39.11701
	map.centerAndZoom( point_ , zoom_level );               // 初始化地图,设置中心点坐标和地图级别。
	//map.centerAndZoom("哈尔滨",12);                   		// 初始化地图,设置城市和地图级别。
	map.addControl(new BMap.NavigationControl());           // 添加平移缩放控件
	map.addControl(new BMap.ScaleControl());                // 添加比例尺控件
	map.addControl(new BMap.OverviewMapControl());          // 添加缩略地图控件
}

/**
 * 设置地图中心和缩放级别
 * @param locationinfo		位置相关信息
 * 							array(
 * 									areaname	--	省市区以","分割。默认：null
 * 									geo			--	坐标位置。默认：null.{lat,lng}
 * 									distance	--	距离用来设置缩放级别。默认：null
 * 									ifzoom		--	是否设置缩放级别。默认:true
 * 									ifgeo		--	是否使用geo坐标设置地图中心。默认：true
 * 								 );
 */
function setMapCenterZoom(locationinfo){
	var _tmp_center_point = MAP_DEFAULT_GEO;
	var _tmp_center_zoom  = MAP_DEFAULT_ZOOM;	
	
	if(locationinfo==null){
		
	}else{
		
		/** 测试数据 'lng':"39.915055" , 'lat':"116.402814" **/
		if(false){
			locationinfo['distance'] = 800;
			locationinfo['geo']['lat']="39.915055";
			locationinfo['geo']['lng']="116.402814";
		}
		//初始化设置
		if(locationinfo['ifgeo']==null)locationinfo['ifgeo']=true;
		if(locationinfo['ifzoom']==null)locationinfo['ifzoom']=true;
		
		//按城市设置地图中心
		if(locationinfo['areaname']!=null){
			var tmp_areaname = locationinfo['areaname'];
			var tmp_area = areaname.split(" ");
			if(tmp_area.length>1){_tmp_center_point = tmp_area[1];}
		}
		
		//按坐标设置地图中心
		if(locationinfo['geo']!=null&&locationinfo['ifgeo']==true){
			_tmp_center_point = new BMap.Point(locationinfo['geo']['lng'],locationinfo['geo']['lat']);
		}
		//alert(_tmp_center_point);
		//按距离设置缩放级别
		if(locationinfo['distance']!=null){
			if(locationinfo['distance']!='city'){
				var tmp_distance_ = parseInt(locationinfo['distance']);
				
				if(tmp_distance_<=10000){
					_tmp_center_zoom = 13;
				}
				if(tmp_distance_<=5000){
					_tmp_center_zoom = 14;
				}
				if(tmp_distance_<=2000){
					_tmp_center_zoom = 15;
				}
				if(tmp_distance_<=1000){
					_tmp_center_zoom = 16;
				}
				if(tmp_distance_<=500){
					_tmp_center_zoom = 17;
				}
				if(tmp_distance_<=100){
					_tmp_center_zoom = 19;
				}			
			}else{
				_tmp_center_zoom  = 12;
			}
		}
		
		//按坐标设置地图中心
		if(locationinfo['ifzoom']!=true){
			_tmp_center_zoom=null;
		}
	}
	//alert(_tmp_center_point.lat+" -- "+_tmp_center_point.lng+" -- "+_tmp_center_zoom);
	map.centerAndZoom( _tmp_center_point , _tmp_center_zoom ); 
}


function getAverageGeo(){
	
	for( var i = 0 ; i < store_markers.length ; i++ ){
		
	}
}

/**
 * 在地图上标记店铺
 * @param _ary_store 类型array，店铺数据集合。
 * @param _icon		 标点图标，为地图API中的Icon对象。
 * @returns {Array}	 画在地图上的点。{ id:_ary_store[i].dist_id , marker: BMap.Marker ,storeinfo:_ary_store[i]}
 */
function drawStoreMarkers(_ary_store,_icon){
	var _markers = new Array();
	var index_=0;
	var brand_id_ = 0;
	for( var i = 0 ; i < _ary_store.length ; i++ ){
		index_ = _ary_store[i].store_id+"";
		
		var _tmp_marker = new BMap.Marker( new BMap.Point( _ary_store[i].geolong ,_ary_store[i].geolat )
											, {icon: _icon} );

		_tmp_marker.removeEventListener("click");
		_tmp_marker.distid = index_;
		//_tmp_marker.brand_id = _ary_store[i].brand_id+"";
		_tmp_marker.addEventListener("click", function(){     
			var _infoWindow = getStoreInfoWindow(new BMap.Size(0, this.getIcon().size.height*(-1) ),getStoreMarker(this.distid).storeinfo);
			this.openInfoWindow(_infoWindow);  
		});

		map.addOverlay(_tmp_marker);
		_markers[i] = { id:index_ ,brand_id:_ary_store[i].brand_id, marker:_tmp_marker ,storeinfo:_ary_store[i]};
	}
	
	return _markers;
}


/**
 * 地图上的标点，点击弹出框对象。
 * @param offset_size	BMap.Size对象，表示弹出框相对于标点的偏移量。
 * @param ary_store		array对象，保存单个店铺信息供弹出框显示用。
 * @returns {BMap.InfoWindow}
 */
function getStoreInfoWindow(offset_size,ary_store){
	var opts={}; var html_ = "";
	var map_pop_infowindow_html = $('#widget_html').find('#map_pop_store_infowindow').html();
	//alert(map_pop_infowindow_html);
	opts = {
			  offset: offset_size,//new BMap.Size(0, _icon.size.height*(-1) ), 
			  width : 350,     // 信息窗口宽度
			  height: 140,     // 信息窗口高度
			  title : "<h1 style='font-size:14px; line-height: 25px;'>"+ary_store.store_name
			  			+"<span>&nbsp;</span></h1>"  // 信息窗口标题
	};
	html_ = map_pop_infowindow_html;
	//html_ = html_.replace(new RegExp(/(mpi_cate_name)/g),ary_store.cate_name);
	//html_ = html_.replace(new RegExp(/(mpi_cate_id)/g),ary_store.cate_id);
	html_ = html_.replace(new RegExp(/(mpi_phone)/g),ary_store.phone);
	html_ = html_.replace(new RegExp(/(mpi_address)/g),ary_store.address);
	//html_ = html_.replace(new RegExp(/(mpi_dist_id)/g),ary_store.dist_id);
	html_ = html_.replace(new RegExp(/(mpi_store_logo)/g),ary_store.store_logo);
	html_ = html_.replace(new RegExp(/(mpi_store_id)/g),ary_store.store_id);
	html_ = html_.replace(new RegExp(/(mpi_brand_id)/g),ary_store.brand_id);
	html_ = html_.replace(new RegExp(/(mpi_brief)/g),ary_store.brief);
	//alert(html_);
	var store_infoWindow = new BMap.InfoWindow(html_, opts);  // 创建信息窗口对象
	return store_infoWindow;
}

/**
 * 从store_markers中取出id_对应的marker对象。不存在返回null
 */
function getStoreMarker(id_){
	for( var i = 0 ; i < store_markers.length ; i++ ){
		//alert(store_markers[i].id + " - " + id_);
		if(store_markers[i].id==id_)return store_markers[i];
	}
	return null;
}

/**
 * 从store_markers中取出id_对应的marker对象。不存在返回null
 */
function getStoreMarkerByBrandId(brand_id_){
	var sub_markers = new Array();
	var _index = 0;
	for( var i = 0 ; i < store_markers.length ; i++ ){
		//alert(store_markers[i].brand_id + " - " + brand_id_);
		if(store_markers[i].brand_id==brand_id_){
			sub_markers[_index] = store_markers[i];
			_index++;
		}
	}
	return sub_markers;
}


/**
 * 清理所有数据。包括：当前配送范围对象、地图上的覆盖物、当前查询的店铺信息。
 */
function cleanAll(){
	//cleanCurrentStoreDistributions();
	map.clearOverlays();
	store_markers = new Array();
	//my_markers = new Array();
}

function cleanStore(){
	//alert('shanchu');
	//cleanCurrentStoreDistributions();
	if(store_markers==null)return;
	for( var j = 0 ; j < store_markers.length ; j++ ){
		map.removeOverlay(store_markers[j]);
	}
	store_markers = new Array();
}
